package com.XiaoLongGroup.webtech.Interceptor;/**
 * @author : SLCcccc
 * @date : 2023/5/14 10:25
 */

import com.XiaoLongGroup.webtech.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *@ClassName CustomerInterceptor
 *@Description TODO
 *@Author SLCcccc
 *@Date 2023/5/14 10:25
 *@Version 1.0
 */
public class CustomerInterceptor implements HandlerInterceptor {
    /**
     * 在控制器方法前执行，其返回值表示是否中断后续操作， true —— keep  false —— 中断
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        String uri = request.getRequestURI();

        //判断当前请求地址是否登录地址
        if(uri.contains("Login") || uri.contains("login")
                || uri.contains("logon") || uri.contains("Logon") || uri.contains("update"))
        {
            //登录请求，直接放行
            return true;
        }
        else
        {
            //判断用户是否登录
            if(request.getSession().getAttribute("loginUser")!=null)
            {
                //说明已经登录，放行
                return true;
            }
            else
            {
                //没有登录，跳转到登录界面
                response.sendRedirect(request.getContextPath() + "/login");
            }
        }

        //默认拦截
        return false;

//        // System.out.println("Constomer preHandle");
//        // URI 统一资源标识符
//        User user = (User)request.getSession().getAttribute("loginUser");
//        if (user == null){
//            // 如果用户未登录，跳转到登录页面
//            request.getRequestDispatcher("/login").forward(request, response);
//            return false;
//        }else{
//            // 含有user信息，放行
//            return true;
//        }
    }

    /**
     * 在控制器方法调用之后，且解析视图之前执行，可以此对请求域中的模型和视图进行进一步修改
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        // System.out.println("Constomer postHandle");
    }

    /**
     * 在整个请求完成，视图渲染结束之后执行，可以此方法实现一些资源清理，日志记录的工作
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
       // System.out.println("Constomer afterCompletion");
    }
}
